package com.winner.data.util;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import cn.hutool.core.collection.ListUtil;

/**
 * 通常涉及 四舍五入的 操作都建议用BigDecimal,也能保证精度, 另外对于只比较大小可以用Double BigDecimal.ROUND_HALF_UP(推荐用这种) RoundingMode.HALF_UP都可以
 *
 *
 * @author wangxinle5
 * @since 2024-01-10
 */
public class BigDecimalUtil {

    public static void main(String[] args) {

        BigDecimal result1 = new BigDecimal("123.456").setScale(2, BigDecimal.ROUND_DOWN);

        // 四舍五入，≥5 就进位
        BigDecimal result2 = new BigDecimal("123.4567").setScale(2, BigDecimal.ROUND_HALF_UP);

        // 五舍六入，>5 才进位
        BigDecimal result3 = new BigDecimal("123.4557").setScale(2, BigDecimal.ROUND_HALF_DOWN);


        BigDecimal num1 = new BigDecimal("1");
        BigDecimal num2 = new BigDecimal("3");

        int i = num1.compareTo(num2);
        if (i < 0) {
            System.out.println("小于");
        }

        // 加法
        BigDecimal add = num1.add(num2);

        // 减法
        BigDecimal subtract = num1.subtract(num2);

        // 乘法 保留精度 四舍五入  // bd.toString(); BigDecimal 转为字符串
        String multiply = num1.multiply(num2).setScale(2, BigDecimal.ROUND_HALF_UP).toString();

        // 除法 保留小数2位 一定要写保留的精度 和 四舍五入, 不然会报错
        BigDecimal divide = num1.divide(num2, 2, BigDecimal.ROUND_HALF_UP);



        ArrayList<String> stringList = ListUtil.toList("12", "22");
        List<BigDecimal> doubleList1 = stringList.stream().map(BigDecimal::new).collect(Collectors.toList());

        List<Double> doubleList2 = stringList.stream().map(Double::valueOf).collect(Collectors.toList());

        BigDecimal sum = doubleList1.stream().reduce(BigDecimal.ZERO, BigDecimal::add);

        BigDecimal zero = BigDecimal.ZERO;

    }

}
